//
//  RBDeviceApi.h
//  Pods
//
//  Created by baxiang on 16/11/12.
//
//

#import <Foundation/Foundation.h>
#import "RBDeviceModel.h"

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger,RBNightSetting){
    RBNightSettingSwitch = 0, // 设置夜间模式开关
    RBNightSettingTime      // 设置夜间模式时间段

};


@interface RBDeviceApi : NSObject


#pragma mark ------------------- 设备权限 ------------------------

/**
 更改管理员

 @param deviceID 设备ID
 @param userID 用户的ID
 */
+ (void)changeManager:(NSString *_Nonnull)deviceID userID:(NSString *_Nonnull)userID completionBlock:(nullable void (^)(BOOL isSucceed, NSError *_Nullable error))completionBlock;

/**
    删除所绑定的设备

 @param deviceID 设备ID
 */
+ (void)deleteOwnDevice:(NSString *_Nonnull) deviceID  completionBlock:(nullable void (^)(BOOL isSucceed,NSError * _Nullable error)) completionBlock;

/**
   添加其他用户到设备成员组里面

 @param userPhone 用户的手机号码
 */
+ (void)addUser:(NSString *_Nonnull)userPhone deviceID:(NSString*_Nonnull)deviceID completionBlock:(nullable void (^)(id _Nullable response,NSError *_Nullable error)) completionBlock;

/**
   从当前设备成员组中删除用户

 @param userid 用户 id
 */
+ (void)deleteUser:(NSString *_Nonnull)userid deviceID:(NSString*_Nonnull)deviceID  completionBlock:(nullable void (^)(id _Nullable response,NSError *_Nullable error)) completionBlock;

#pragma mark ------------------- 设备信息 ------------------------
/**
 获取当前用户的所有设备
 */
+ (void)fetchAllDevices:(nullable void(^)(NSArray <RBDeviceModel*>* _Nullable device,NSError * _Nullable error))completionBlock;

/**
  获取设备硬件信息
 @param deviceID 设备的ID数据
 */
+ (void)fetchHardwareInfo:(NSString*_Nonnull)deviceID completion:(nullable void(^)(id deviceDict,NSError *error))completionBlock;

/**
 获取设备的信息

 @param deviceID 设备的ID
 */
+ (void)fetchDeviceDetail:(NSString *_Nonnull) deviceID completionBlock:(nullable void (^)(RBDevicesDetail * _Nullable detail,NSError *_Nullable error)) completionBlock;

#pragma mark ------------------- 设备控制 ------------------------


/**
  旋转设备

 @param deviceID 设备ID
 @param angle 角度值
 @param actionDetail 一直旋转 传三个字符:left\right\stop \左\右\停 其他字符非法
 */
+ (void)rotateDevice:(NSString *)deviceID angle:(float)angle actionDetail:(NSString *)actionDetail completionBlock:(void (^)(BOOL isSuccess,NSError *error)) completionBlock;
/**
 重启设备

 @param completionBlock isSucceed 重启是否成功 error 错误信息
 */
+ (void)restart:(NSString *_Nonnull) deviceID  completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;

/**
 开启安全防护
 @param deviceID 设备的ID
 @param isOn 是否打开

 */
+ (void)switchSafetyState:(NSString* _Nonnull)deviceID isOn:(BOOL)isOn completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;

/**
 修改设备的安防时间段

 @param deviceID 设备的ID
 @param startTime 开始时间
 @param endTime 结束时间
 */
+ (void)updateSafetyTime:(NSString*_Nonnull)deviceID startTime:(NSString * _Nonnull)startTime endTime:(NSString *_Nonnull)endTime  completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;

/**
 设置夜间模式开关 不管是设置时间段和设置夜间模式开关 都需要传送开始时间和结束时间
 
 @param deviceID 设备ID
 @param settingType 设置时间段和设置夜间模式开关
 @param switchState 夜间模式的开关
 @param startTime 开始时间 格式@"07:22"
 @param endTime 结束时间   格式@"10：00"
 */
+(void)updateNightMode:(NSString *_Nonnull) deviceID nightSetting:(RBNightSetting)settingType switchState:(BOOL)switchState startTime:(NSString * _Nonnull)startTime endTime:(NSString *_Nonnull)endTime completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;

#pragma mark ------------------- 设备设置 ------------------------

/**
 修改设备的名称
 @param deviceID  设备的ID
 @param newName 新的名称
 */
+ (void)updateDeviceName:(NSString*_Nonnull)deviceID name:(NSString *_Nonnull)newName completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;

/**
  进入视频连接成功的声音开关
 
 @param deviceID 设备的ID
 @param isOn 打开或者关闭
 */
+ (void)switchVideoConnetVoice:(NSString *_Nonnull) deviceID isOn:(BOOL) isOn completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;
/**
 修改设备音量

 @param deviceID 设备的ID
 @param voiceValue 音量值 最小值0 最大值100

 */
+ (void)updateVolume:(NSString *_Nonnull) deviceID voice:(float)voiceValue completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;

/**
 修改设备的声音音色类型

 @param deviceID 设备的id
 @param soundName 字符串  NANNAN 或 ROOBO_BOY
 */
+ (void)updateSound:(NSString *_Nonnull ) deviceID  soundName:(NSString* _Nonnull)soundName completionBlock:(nullable void (^)(BOOL isSucceed,NSError *_Nullable error)) completionBlock;


#pragma mark -------------------版本升级------------------------

/**
    检测是否有新版本

 @param deviceId 设备ID
 */
+(void)checkVersionWithid:(NSString *)deviceId completionBlock:(void (^)(BOOL update,NSString * version,NSError * _Nullable))completionBlock;

/**
 硬件设备升级

 @param deviceId 设备ID
 */
+(void)updateDeviceWithid:(NSString *)deviceId completionBlock:(void (^)(id response, NSError * _Nullable))completionBlock;



@end
NS_ASSUME_NONNULL_END
